﻿#define _CRT_SECURE_NO_WARNINGS
//用于cpp 循环嵌套练习题的整理


//包含9的数字问题
//https://www.nowcoder.com/practice/0948f4f3344c452f843afd3585dd0f8d?tpId=290&tqId=320953&ru=/exam/oj&qru=/ta/beginner-programmers/question-ranking&sourceUrl=%2Fexam%2Foj
//#include <iostream>
//using namespace std;
//
//int i, count;
//
//int main()
//{
//    int count = 0;
//    for (i = 1; i <= 2019; i++)
//    {
//        int tmp = i;
//        do                         //do_while 循环用于查找是否存在9 这个数字
//        {
//            if (tmp % 10 == 9)
//            {
//                count++;  
//                break;
//            }
//            tmp /= 10;
//        } while (tmp);
//    }
//    cout << count << endl;
//
//    return 0;
//}



//n的阶乘分之1 的求和
//https://www.luogu.com.cn/problem/B2079#submit
//#include <iostream>
//using namespace std;
//#include <cstdio>
//
//typedef long long ll;
//
//ll n, i, j;
//double sum = 1.0;
//
//int main()
//{
//    cin >> n;
//    for (i = 1; i <= n; i++)
//    {
//        ll mul = 1;   //每次回来mul 重置
//        for (j = 1; j <= i; j++)  //j <= i 注意j 最多到i 是i 的阶乘嘛
//            mul *= j;
//
//        sum += 1.0 / mul;
//    }
//    printf("%.10lf\n", sum);
//
//    return 0;
//}



//打印矩形问题    (n 为0 时空心 其它实心)
//https://www.luogu.com.cn/problem/B2083#submit
//#include <iostream>
//using namespace std;
//
//int x, y, n, i, j;
//char ch;
//
//int main()
//{
//    cin >> y >> x >> ch >> n;    //此处读题后 发现第一个输入进来的是高  第二个才是宽  因此此处将x 与y 的输入顺序颠倒即可
//    if (n != 0)
//        for (i = 1; i <= y; i++) //row
//        {
//             for (j = 1; j <= x; j++)  //col
//                cout << ch;
//             cout << endl;
//        }
//           
//    else
//    {
//        for (i = 1; i <= y; i++)
//        {
//            for (j = 1; j <= x; j++)
//            {
//                if (i != 1 && i != y && j >= 2 && j <= x - 1)
//                    cout << " ";
//                else  cout << ch;
//            }
//            cout << endl; 
//        }
//    }
//
//    return 0;
//}


//重点题目
//第n 小质数问题                              //注意 1 不是质数 质数的定义是大于1 的自然数，除了1 和它本身以外没有其他正因数 因此最小的质数是 2！
//https://www.luogu.com.cn/problem/B2085#submit
// 
// 时间复杂度太高了这个算法 下面有优化算法
//#include <iostream>
//using namespace std;
//
//typedef long long ll;
//
//ll n, i, j;
//
//int main()
//{
//    cin >> n;
//    int count = 0;
//    for (i = 1; i <= 1000000000000000; i++)
//    {
//        int flag = 0;
//        for (j = 1; j <= i ; j++)
//        {
//            if (j != 1 && i % j == 0 && j != i)  //不是质数
//            {
//                flag = 1;
//                break;
//            }
//        }
//
//        if (flag == 0)  //是质数
//            count++;
//        
//        if (count == n + 1)  //注意要多+1  因为我在这个算法中将1 算成了质数 其实1 不是质数 2才是最小的质数 因此此处要多+1
//        {
//            cout << i << endl;
//            break;
//        }
//    }
//    return 0;
//}    

//优化算法
#include <iostream>
using namespace std;

typedef long long ll;

ll n, i, j;

int main()
{
    cin >> n;
    int count = 1;
    if (n == 1)                       //直接特殊情况独立出来单独处理
        cout << 2 << endl;
    else
    {
        for (i = 3; i <= 1000000000000000; i += 2)    //此处用while(1) 表示死循环会更好一些
        {
            int flag = 0;
            for (j = 3; j * j <= i; j++)    //定理及优化思路：如果 n 有⼀个因⼦ a ，那么必然存在另⼀个因⼦ b ，使得 n = a × b 。如果 a * b 都⼤于 根号n ，那么 a×b 将会⼤于 n ，这与 n = a×b ⽭盾。因此⾄少有⼀个因⼦不会超过 根号n 的。
            {
                if (i % j == 0)  //不是质数
                {
                    flag = 1;
                    break;
                }
            }

            if (flag == 0)  //是质数
                count++;

            if (count == n)
            {
                cout << i << endl;
                break;
            }
        }
    }
    
    return 0;
}

//鹏哥写的代码
//#include <iostream>
//#include <cmath>
//using namespace std;
//
//int n, i = 2, c, j;
//
//int main()
//{
//    cin >> n;
//    while (1)
//    {
//        //判断i是否是质数
//        int flag = 1;
//        for (j = 2; j <= sqrt(i); j++)   //注意 此处的等号= 不能漏   因为是至少有一个n 的因数 会小于等于根号n 且同时另一个与其对应的因数 会大于等于根号n
//        {
//            if (i % j == 0)
//            {
//                flag = 0;
//                break;
//            }
//        }
//        if (flag)
//            c++;
//        if (c == n)
//        {
//            cout << i << endl;
//            break;
//        }
//        i++;    //此处鹏哥是从j = 2 开始 且i 是每次+1 的  而我们知道i 为偶数的时候由于肯定能除2 所以比如不是质数 因此我们可以像上面我写的代码那样 让i 从3 开始 每次i += 2  然后对于i 为2 也是质数的情况 单独讨论即可 进一步优化代码
//    }
//    return 0;
//}



//水仙花数问题
//https://ybt.ssoier.cn/problem_show.php?pid=2029
//#include <iostream>
//using namespace std;
//#include <cmath>
//
//int i;
//int main()
//{
//	for (i = 100; i <= 999; i++)
//	{
//		if (pow(i % 10, 3) + pow(((i / 10) % 10), 3) + pow(((i / 100) % 10), 3) == i)
//			cout << i << endl;  
//	}
//	return 0;
//}







//打印三角形        不重要 放在此处只是为了方便写代码
//https://ybt.ssoier.cn/problem_show.php?pid=2027
//#include <iostream>
//using namespace std;
//
//int n, i, j;
//
//int main()
//{
//	cin >> n;
//	for (i = 0; i < n; i++)
//	{
//		for (j = 0; j <= i; j++)
//			cout << '*';
//		cout << endl;
//
//	}
//	return 0;
//}